home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / xdialog.exe / X_DIALOG.PAS < prev    next >
Pascal/Delphi Source File  |  1991-07-01  |  5KB  |  220 lines

  1. {$X+,O+,F+,R+}
  2.  
  3. { Unit X_Dialog                                                 }
  4. {   Extended Dialog Boxes                                       }
  5. {                                                               }
  6. { Donn Aiken, 71150,2011                                        }
  7. { May 17, 1991                                                  }
  8.  
  9. { Small example program to show how to create what functions as }
  10. { a dialog box that scrolls.                                    }
  11. { Look at TMyListBox object to see how it's done.               }
  12. {                                                               }
  13. { Based somewhat upon the ListBox example without a scrollbar   }
  14. { by Mike Savage, 71121,3137.                                   }
  15. {                                                               }
  16.  
  17.  
  18. unit x_dialog;
  19.  
  20. interface
  21.  
  22. uses Objects, Views, Dialogs, Drivers;
  23.  
  24. const
  25.   TBoxMaxSize = 63;
  26.  
  27. type
  28.   PStringO = ^TStringO;
  29.   TStringO = object (TObject)
  30.     Item : PString;
  31.     constructor Init (s : string);
  32.     destructor  Done; virtual;
  33.   end;
  34.  
  35.  
  36.   PBoxData   = ^TBoxData;
  37.   TBoxData   = object (TObject)
  38.     PList : PCollection;
  39.     Sel   : array [0..TBoxMaxSize] of boolean;
  40.     constructor init;
  41.     procedure   clear;  virtual;
  42.     function    empty : boolean; virtual;
  43.   end;
  44.  
  45.  
  46.   PMyListBox = ^TMyListBox;
  47.   TMyListBox = object(TListBox)
  48.     Selected  : array [0..TBoxMaxSize] of boolean;
  49.     CheckChar : Char;
  50.  
  51.     constructor Init     (var Bounds      : TRect;
  52.                               CChar       : Char;
  53.                               Cols        : Byte;
  54.                               AVScrollBar : PScrollBar);
  55.  
  56.     destructor Done; virtual;
  57.  
  58.     function  DataSize : Word; virtual;
  59.     procedure GetData     (var Rec); virtual;
  60.     procedure HandleEvent (var Event: TEvent); virtual;
  61.     procedure SetData     (var Rec); virtual;
  62.     function  GetText     (Item: Integer; MaxLen: Integer): String; virtual;
  63.     procedure SelectItem  (item : integer); virtual;
  64.   end;
  65.  
  66. var
  67.   TC : PCollection;
  68.  
  69. implementation
  70.  
  71. constructor TStringO.Init (S : String);
  72.  
  73. begin
  74.   TObject.Init;
  75.   Item := NewStr(S);
  76. end;
  77.  
  78. destructor TStringO.Done;
  79.  
  80. begin
  81.   DisposeStr (Item);
  82.   TObject.Done;
  83. end;
  84.  
  85.  
  86. constructor TBoxData.Init;
  87.  
  88. var
  89.   i : integer;
  90.  
  91. begin
  92.   TObject.Init;
  93.   PList := Nil;
  94.   TBoxData.Clear;
  95. end;
  96.  
  97. procedure TBoxData.Clear;
  98.  
  99. var
  100.   i : integer;
  101.  
  102. begin
  103.   for i := 0 to TBoxMaxSize do
  104.     Sel[i] := False;
  105. end;
  106.  
  107. function TBoxData.Empty : boolean;
  108.  
  109. var
  110.   i : integer;
  111.   b : boolean;
  112.  
  113. begin
  114.   b := true;
  115.   for i := 0 to TBoxMaxSize do
  116.     if (sel[i]) then b := false;
  117.   Empty := b;
  118. end;
  119.  
  120. { TMyListBox }
  121. constructor TMyListBox.Init (var  Bounds : TRect;
  122.                                    CChar : Char;
  123.                                    Cols  : Byte;
  124.                              AVScrollBar : PScrollBar);
  125.  
  126. var
  127.   i   : byte;
  128.   R   : TRect;
  129.   mw,
  130.   ml  : Byte;
  131.  
  132. begin
  133.   TListBox.Init (Bounds, Cols, AVScrollBar);
  134.   CheckChar := CChar;
  135.   GrowMode  := gfGrowHiX or gfGrowHiY;
  136.   for i := 0 to TBoxMaxSize do
  137.     Selected[i] := false;
  138. end;
  139.  
  140. destructor TMyListBox.Done;
  141.  
  142. begin
  143.   TListBox.Done;
  144. end;
  145.  
  146. function  TMyListBox.DataSize: Word;
  147.  
  148. begin
  149.   DataSize := Sizeof(TBoxData);
  150. end;
  151.  
  152. procedure TMyListBox.GetData (var Rec);
  153.  
  154. begin
  155.   PBoxData(Rec)^.PList := List;
  156.   Move(Selected, PBoxData(Rec)^.Sel, sizeof(Selected));
  157. end;
  158.  
  159. procedure TMyListBox.HandleEvent (var Event: TEvent);
  160.  
  161. var
  162.   p : TPoint;
  163.   r : TRect;
  164.   current_column : byte;
  165.   i : byte;
  166.  
  167. begin
  168.   if (Event.What = evMouseDown) then
  169.     begin
  170.       GetBounds (R);
  171.       MakeLocal(Event.Where, P);
  172.       current_column := P.X * NumCols div Size.X;
  173.       if (P.Y + Current_Column * Size.Y = Focused - TopItem) then
  174.         begin
  175.           selected[Focused] := not(Selected[Focused]);
  176.           drawview;
  177.           ClearEvent (Event);
  178.         end
  179.     end;
  180.   TListBox.HandleEvent (Event);
  181.   Drawview;
  182. end;
  183.  
  184.  
  185. procedure TMyListBox.SetData (var Rec);
  186.  
  187. begin
  188.   move (PBoxData(Rec)^.Sel, Selected, Sizeof(Selected));
  189.   TListBox.NewList(PBoxData(Rec)^.PList);
  190. end;
  191.  
  192.  
  193. function  TMyListBox.GetText (Item: Integer; MaxLen: Integer): String;
  194.  
  195. var
  196.   s : string;
  197.  
  198. begin
  199.   if (List = Nil) then
  200.     GetText := ''
  201.   else
  202.     begin
  203.       s := Copy (PStringO(List^.At(Item))^.Item^, 1, MaxLen-5);
  204.       if (Selected[Item]) then
  205.         GetText := '[' + CheckChar + '] ' + s
  206.       else
  207.         GetText := '[ ] ' + s;
  208.     end;
  209. end;
  210.  
  211.  
  212. procedure TMyListBox.SelectItem(Item : integer);
  213.  
  214. begin
  215.   TListBox.SelectItem(Item);
  216.   Selected[item] := not(Selected[item]);
  217.   Drawview;
  218. end;
  219.  
  220. end.